package com.h3c.ptability.service;

import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.h3c.ptability.dto.electronicSign.DocTemplateAndFeatureDTO;
import com.h3c.ptability.entity.PtEsignDocFeature;
import com.h3c.ptability.entity.PtEsignDocTemplate;
import com.h3c.ptability.entity.PtEsignSceneTemplate;
import com.h3c.ptability.support.PtEsignDtoPart;
import com.h3c.ptability.vo.NameAndIdVO;

import java.io.File;
import java.util.List;

/**
 * 电子签doc文件模板接口类
 *
 * @author chenyifan
 * @since 2022-05-19 10:46:25
 */
public interface IPtEsignDocTemplateService extends IService<PtEsignDocTemplate> {

    /**
     * 根据场景获取场景下包含的文件模板
     *
     * @param sceneId 场景id
     * @return 模板列表
     */
    List<PtEsignDocTemplate> getTemplateListBySceneId(String sceneId);

    /**
     * 获取pdf格式的签署填充完成后文件
     *
     * @param originDocTemplate 源文件模板
     * @param userInfo          用户信息
     * @return
     */
    File getPdfTemplate(PtEsignDocTemplate originDocTemplate, JSONObject userInfo);

    /**
     * 组装签署位置等变量
     *
     * @param originDocTemplate 源文件模板
     * @param esignDocFeature   签章配置
     * @param userInfo          用户信息
     * @return 组装好的部分数据
     */
    PtEsignDtoPart fixTemplateParam(PtEsignDocTemplate originDocTemplate, List<PtEsignDocFeature> esignDocFeature, JSONObject userInfo);

    /**
     * 根据id获取模板文件信息
     *
     * @param ids 模板id列表
     * @return 模板列表
     */
    List<PtEsignDocTemplate> getTemplateListByIds(List<String> ids);

    /**
     * 保存模板和模板配置
     *
     * @param templateAndFeatureDTO 保存模板的dto
     * @throws Exception 保存模板失败
     */
    void saveTemplate(DocTemplateAndFeatureDTO templateAndFeatureDTO) throws Exception;

    /**
     * 根据场景获取
     *
     * @param esignSceneList 场景
     * @return list 模板列表
     */
    List<PtEsignDocTemplate> getTemplateListByTemplateList(List<PtEsignSceneTemplate> esignSceneList);

    /**
     * 根据模板id删除模板
     *
     * @param templateId 模板id
     */
    void deleteTemplate(String templateId);

    /**
     * 获取模板 id 和 name 的集合
     *
     * @param appId
     * @return
     */
    List<NameAndIdVO> getDocNameList(String appId);

    /**
     * 编辑模板
     *
     * @param templateAndFeatureDTO
     * @throws Exception
     */
    void updateTemplate(DocTemplateAndFeatureDTO templateAndFeatureDTO) throws Exception;
}

